﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//写一个函数求两个数的较大值
//创建整型函数Add并创建两个整型变量，来接受输入的两个值
//int Add(int x, int y)//x和y是用来进行接受输入的值
//{
//	//创建整型变量在z，并用三目运算写一个表达式，	 
//	int z = (x >y ? x : y);//如果X大于y，输出x，否则输出y，并把值赋给变量z
//	//z是整型，要返回给Add，所以Add也是整型
//	//return (x > y ? x : y);//也可以直接返回，更方便
//	return z; //把z给返回给Add
//}
//
//int main()
//{
//	int num1 = 0;//创建三个整数，赋初值（也可以不用）
//	int num2 = 0;
//	int sum = 0;
//	scanf("%d %d",&num1,&num2);//输入两个整数，来进行判断（scanf是输入的意思）
//	//用函数进行判断，sum来接受传过来的值
//	sum = Add(num1, num2);//调用函数，进行判断，并把接收的值赋给sum
//	printf("%d\n", sum);//输出并打印sum的值
//	return 0;
//}

//计算n的阶乘
//int main()
//{
//	int n = 0;  //创建整型变量n
//	scanf("%d", &n);  //输入一个数，放到n里
//	int i = 0;   //创建整型变量i和ret，i用来for循环，ret用来存储数据
//	int ret = 1;// 注意，ret初始化不能为0，因为0乘以多少都是0
//	//循环开始，i从1开始循环，n的值决定了i循环几次，n是3，则循环3次，每次循环结束i递增1
//	//阶乘，ret初始化为1，ret乘以i，值赋给ret，继续循环，乘以i
//	for (i = 1; i <= n; i++)  //for循环，i初始化1，i的值<=n, 循环结束 i自增1
//	{
//		ret = ret * i;  //ret乘上i,得到的值赋给ret
//	}
//	printf("%d\n", ret);// 输出并打印ret的值
//	return 0;
//}

//计算 1！+2！+3！+...+10！
//int main()
//{
//	int n = 0; //创建整型变量n
//	int ret = 1;//注意，ret初始化不能为0，因为0乘以多少都是0
//	int sum = 0;//创建整型变量ret和sum，sum用来存储和
//	for (n = 1; n <= 3; n++)// for 循环，n初始化1，n小于等于3，则循环三次，每次循环结束，n递增1
//	{
//		ret = ret * n;  //ret乘以n，每次循环n不同的值，乘以ret,得到的结果赋给ret
//		sum = sum + ret;// sum加ret，ret循环结束，加sum求和，得到的值赋给sum
//	}
//	printf("%d\n", sum);//输出并打印sum的值
//	return 0;
//}


//在一个有序数组中查找具体的某个数字n （二分查找法）
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	int k = 7;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if(arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了，下标是%d\n", mid);
			break;
		}
	}
	if (left > right)
	{
		printf("找不到\n");
	}
	return 0;
}

//打印3的倍数的数
//int main()
//{
//	//int i = 0;
//	//for (i = 1; i < 100; i++)
//	//{
//	//	if (i % 3 == 0)
//	//		printf("%d\n", i);
//	//}
//	//while 循环两种写法
//	//int i = 0;
//	int i = 1;
//	while (i < 100)
//	{
//		if (i % 3 == 0)
//			printf("%d ", i);
//		i++;
//		//if (i != 0)
//		//	printf("%d ", i);
//		//i += 3;
//	}
//	return 0;
//}

//从大到小输出
//int main()
//{
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	scanf("%d %d %d", &a, &b, &c);
//	if (a > b && b > c)
//		printf("%d %d %d\n", a, b, c);
//	else if (a > c && c > b)
//		printf("%d %d %d\n", a, c, b);
//	else if (b > a && a > c)
//		printf("%d %d %d\n", b, a, c);
//	else if (b > c && c > a)
//		printf("%d %d %d\n", b, c, a);
//	else if (c > b && b > a)
//		printf("%d %d %d\n", c, b, a);
//	else if (c > a && a > b)
//		printf("%d %d %d\n", c, a, b);
//	return 0;
//}

//打印素数
//int main()
//{
//	int i = 0;
//	int j = 0;
//	int count = 0;
//	for (i = 100; i <= 200; i++)
//	{
//		for (j = 2; j < i; j++)
//		{
//			if (i % j == 0)
//				break;
//		}
//		if (i == j)
//		{
//			count++;
//			printf("%d ", i);
//		}
//	}
//	printf("%d\n", count);
//	system("pause");
//	return 0;
//}

//打印闰年
//最大公约数
//int main()
//{
//	int m = 0;
//	int n = 0;
//	int r = 0;
//	scanf("%d %d", &m, &n);
//	while (r = m % n)
//	{
//		m = n;
//		n = r;
//	}
//	printf("%d", r);
//	return 0;
//}

//乘法口诀表
//求最大值

//BC1 实践出真知
//int main()
//{
//	printf("Practice makes perfect!\n");//输出并直接打印
//	return 0;
//}

//BC2  我是大v
//int main()
//{
//	printf("v   v\n");//输出打印，注意（第一行三个空，第二空一格。）
//	printf(" v v\n");
//	printf("  v\n");
//	return 0;
//}

//BC3 有容乃大
//int main()
//{
//	printf("The size of short is %d bytes.\n", sizeof(short));//按照格式打印输出四个不同整型的字节
//	printf("The size of int is %d bytes.\n", sizeof(int));
//	printf("The size of long is %d bytes.\n",sizeof(long));
//	printf("The size of long long is %d bytes.\n", sizeof(long long));
//	return 0;
//}

//BC6 小飞机
//int main()
//{
//	printf("     **     \n");//按照格式打印，注意空格以及加换行字符（\n）
//	printf("     **     \n");
//	printf("************\n");
//	printf("************\n");
//	printf("    *  *    \n");
//	printf("    *  *    \n");
//	return 0;
//}

//BC7 缩短二进制
//int main()
//{
//	int a = 1234;//创建整型变量a，并赋值1234
//	//%o是以八进制数的形式输出整数，%x是以十六进制数的形式输出整数
//	//%#的作用是完整呈现所有数值位数,%#o是显示八进制前加个：0，%#x是显示十六进制前面加：0x
//	printf("%#o  %#X \n", a, a);//输出并打印对应的八进制数和十六进制数，并在显示是八进制的前导0，和十六进制的前导0X
//	return 0;
//}

//BC8 十六进制转十进制
//int main()
//{
//	int a = 0xABCDEF;//创建一个整型变量a，并赋值十六进制整数
//	//%md表示是输出域宽为m的十进制整数
//	printf("%15d\n", a);//输出打印十六进制对应的整数，并输出域宽为15的十进制整数
//	return 0;
//}

////BC9 printf的返回值
//int main()
//{
//    int a = printf("Hello world!");//创建整型变量a，printf打印字符串后，并把返回值赋值给a
//    //printf返回的是输出的字符个数，空格也是
//    printf("\n");//换行（注意，\n如果是加在第一个printf的里话，返回值会多出一位而不是里面的12位）
//    printf("%d", a);//输出打印printf的返回值
//   //第二种方法
//    printf("\n%d\n", printf("Hello world!"));
//    return 0;
//}

//BC10 成绩输入输出
//int main()
//{
//	int num1, num2, num3;//创建三个整型变量
//	scanf("%d %d %d", &num1, &num2, &num3);//输入三个数，（注意要空格）
//	printf("score1=%d,score1=%d,score1=%d", num1, num2, num3);//按照格式打印输出三个数
//	return 0;
//}

//BC11 学生基本信息输入输出
//int main()
//{
//	int std;//创建一个整型变量和三个单精度浮点数变量
//	float num1, num2, num3;
//	scanf("%d;%f,%f,%f", &std, &num1, &num2, &num3);//输入四个数值，学号和成绩
//	printf("The each subject score of No. %d is %.2f, %.2f, %.2f.\n", std, num1, num2, num3);//按照格式打印并输出学号和成绩，（%.2f是小数点只留两位）
//	return 0;
//}

//BC12 字符圣诞树
//int main()
//{
//	char ch;//创建一个字符变量，和三个整型变量
//	int i = 0;
//	int x, y;
//	scanf("%c", &ch);//输入一个字符（%c表输入输出一个字符）
//	for (i = 1; i < 6; i++)//for循环，i初始化为1，i小于6，循环开始，结束则i自增1，当i等于6时，结束循环
//	{
//		for (x = 5 - i; x > 0; x--)//x初始化为5-i，x小于0，循环开始，输出结果，结束则x自减1，当x等于0时，结束循环
//		{
//			printf(" ");//输出空格
//		}
//		for (y = 0; y < i; y++)//y初始化为0，y小于x，则输出字符，结束则y自增1，当y等于i时，循环结束
//		{
//			printf("%c ", ch);//打印并输出输入的字符
//		}
//		printf("\n");//每次循环结束则输出换行
//	}
//	return 0;
//}

//BC13 ASCII码
//int main()
//{
//	//'\0'表示字符串结束标志
//	char arr[] = { 73,32,99,97,110,32,100,111,32,105,116,33,'\0'};//创建一个字符数组存放12个数字，末尾要加一个'\0',不加会出现乱码，但可以通过，不过还是加上更完整。
//	printf("%s\n", arr);//输出并打印对应的字符，（%s表示输入输出字符串）
//	return 0;
//}

//BC14 出生日期输入输出
//int main()
//{
//	int num1, num2, num3;//创建三个整型变量
//	scanf("%4d%2d%2d", &num1, &num2, &num3);//输入年月日，并指定三个变量的宽域（%md，%m可以指定输入域宽，输入数据域宽（列数），按此宽度截取所需数据）
//	printf("year=%d \n", num1);
//	printf("month=%02d \n", num2);//输出并打印各自对应年月日（%02d表示宽度为2，右对齐方式，位数不够，左边补0，%.2d也是一样的）
//	printf("date=%.2d\n", num3);//(%0格式控制符，输出数值时指定左面不使用的空位置自动填0)
//	return 0;
//}

//BC15 按照格式输入并交换输出
//int main()
//{
//	int num1, num2;//创建两个整型变量
//	scanf("a=%d,b=%d", &num1, &num2);//按照格式输入两个数
//	printf("a=%d,b=%d", num2, num1);//交换两个数并输出打印
//	return 0;
//}

//BC16 字符转ASCII码
//int main()
//{
//	char ch;//创建一个字符变量
//	scanf("%c", &ch);//输入一个字符
//	printf("%d\n", ch);//输出并打印对应字符的ASCII码(用十进制%d打印，就可以打印出对应的ascii码值，输入码值用%c打印，就可以打印出对应的字符）
//	return 0;
//}

//BC17 计算表达式的值
//int main()
//{
//	//创建三个整型变量,并赋值
//	int a = 40;
//	int b = 0;
//	int c = 212;
//	b = (-8 + 22) * a - 10 + c / 2;//计算表达式，并把值赋给b
//	printf("%d\n", b);//输出并打印b的值
//	return 0;
//}

//BC18 计算带余除法
//int main()
//{
//	int a, b;//创建两个整型变量
//	scanf("%d %d", &a, &b);//输入两个值
//	printf("%d %d\n", a / b, a % b);//输出并打印a除b的商，和a模b的余数
//	return 0;
//}

//BC19 反向输出一个四位数
//int main()
//{
//	int a;//创建一个整型变量
//	scanf("%d", &a);//输入一个四位数
//	while (a)//while循环，a的值不等于0，为真，则进入循环判断，a等于0，为假，则循环结束
//	{
//		printf("%d", a % 10);//输入并打印n模10 取余数
//		a = a / 10;//a除10，取商，再赋值给a，继续循环
//	}
//	return 0;
//}

//BC20 kiki算数
//int main()
//{
//	int num1 = 0, num2 = 0;//创建两个整型变量并赋初值
//	scanf("%d %d", &num1, &num2);//输入两个整数
//	printf("%d\n", (num1 + num2) % 100);//输出并打印表达式的值。（模是取商，模100，余25，除是取商，除100，商是1）
//	return 0;
//}

//BC21 浮点数的个位数字
//int main()
//{
//	float num = 0.f;//创建一个浮点数变量，double也行
//	scanf("%f", &num);//输入一个浮点数
//	//int是强制类型转换  int强转运算符将float类型转换成int类型（同理可以使用float()将其他类型数据转换成float类型）后续使用求余运算符。
//	//模是运用于整数，不能运用于浮点数,所以这里要把float类型转换为int类型才可以。
//	printf("%d\n", (int)num % 10);//输出打印浮点数对应的个位数，（int）是强制类型转换，把float类型转换为int类型，再模上10,得到的就是个位数。
//	return 0;
//}

//BC22 你能活多少秒
//int main()
//{
//	int  age = 0;//创建一个整型变量和长整型变量，并赋初值
//	long long m = 31560000;//一年有多少秒赋给m，用long long是因为他的取值范围比int更准确，用int会超出取值范围
//	scanf("%d", &age);//输入一个年龄
//	printf("%lld\n", age * m);//两个值相乘，并打印对应的秒数，（%ld表示打印长整型，%lld表示打印更长整型）
//	return 0;
//}

//BC23 时间转换
//int main()
//{
//	int seconds = 0;//创建四个整型变量
//	int h = 0;//小时
//	int m = 0;//分钟
//	int s = 0;//秒
//	scanf("%d", &seconds);//输入一个数值
//	h = seconds /3600;//取小时，seconds除以3600，得到的小时，再赋给h，（因为每3600秒，为一小时）
//	m = (seconds % 3600)/60;//取分钟，seconds先取模3600，再除以60，得到分钟，赋给m （除去小时剩余的秒数，每60秒为一分钟）
//	s = seconds % 60 ;//取秒。seconds取模60，得到的是秒，再赋给s（凑不够一分钟，就是剩余的秒数）
//	printf("%d %d %d\n", h, m,s);//输出并打印时分秒
//	return 0;
//}

//BC24 总成绩和平均分计算
//int main()
//{
//	double num1, num2, num3,s,n; //创建五个双精度浮点数
//	scanf("%lf %lf %lf", &num1, &num2, &num3);//输入三个浮点数
//	s = num1 + num2 + num3;//把三个数的值相加,值赋给s
//	n = s / 3;//总成绩除以3，值赋给n
//	printf("%.2lf %.2lf\n", s, n);//输出并打印总成绩和平均值（%.2lf是小数点只留两位，%lf表示打印双精度浮点数）
//	return 0;
//}

//BC25 计算体重指数
//int main()
//{
//	//身体质量指数的公式（BMI = 体重（千克）除以身高（米）的平方）
//	int weight, height;//创建两个整型变量和一个浮点数变量
//	float BMI ;
//	scanf("%d %d", &weight, &height);//输入两个数，体重和身高
//	BMI = (height / 100.0) * (height / 100.0); //把身高除以100化为米，在相乘得到的值，赋给BMI
//	BMI = weight / BMI;//体重除以身高的平方，得到的值赋给BMI 
//	printf("%.2f\n", BMI);//输出并打印BMI的值，保留两位小数
//	return 0;
//}

//BC26 计算三角形的周长和面积
//#include<math.h>  
//int main()
//{
//	int a, b, c;
//	double L, S, p;
//	scanf("%d %d %d", &a, &b, &c);
//	L = a + b + c;
//	p = L / 2;
//	S = sqrt(p * (p - a) * (p - b) * (p - c));
//	printf("circumference=%.2f area=%.2f", L, S);
//	return 0;
//}

//BC27 计算球体的体积
//int main()
//{
//
//	return 0;
//}

//BC28 大小写转换
//int main()
//{
//	char ch = 'a';
//	while (scanf("%c", &ch) != EOF)
//	{
//		if (ch >= 'A' && ch <= 'Z')
//		{
//			ch = ch + 32;
//			printf("%c\n", ch);
//		}
//		else if (ch >= 'a' && ch <= 'z')
//		{
//			ch = ch - 32;
//			printf("%c\n", ch);
//		}
//	}
//	return 0;
//}


//BC31 发布信息
//int main()
//{
//	printf("I lost my cellphone!\n");//输出并打印这句话(printf是输出并打印函数）
//	return 0;
//}

//BC32 输出学生信息
//int main()
//{
//	printf("Name    Age    Gender\n");//输出打印信息，注意空格和首字母对齐
//	printf("---------------------\n");
//	printf("Jack    18     man   \n");
//	return 0;
//}

//BC33计算平均成绩
//int main()
//{
//	int num1, num2, num3, num4, num5;//创建五个整型变量
//	float sum = 0;//创建单精度变量，并赋予初值
//	scanf("%d %d %d %d %d", &num1,&num2,&num3,&num4,&num5);//输入五个数值
//  //（注意结果要浮点数，5是整型，要改5.0才是浮点数，加f因为他是float类型，不加会被编译器判定为double类型）
//	sum = (num1 + num2 + num3 + num4 + num5)/5.0f;//把五个数值加起来，再除以5，取平均值赋给sum
//	printf("%.1f\n", sum);//输出打印sum的,(是float类型，打印要%f，.1是取一位小数）
//第二种方式
//	int a=0;//创建三个整型变量和一个float类型的变量，并赋予初值
//	int n = 0;
//	int c = 0;
//	float sum = 0;
//	while(n<5)//while循环，n小于5，则需要循环5次
//	{
//	  scanf("%d", &a);//输入一个数赋给a
//	  c+=a;//a每次循环输入的值，进行相加，赋给c
//	  n++;//n的初始值为0，n++每次循环都加1，1不等于5，则重复循环（后置++是先使用，在相加，n为0，使用后，在相加为1）
//	}
//    sum = c / 5.0f;//循环结束后，c的值在除以5.0f，并把平均值赋给sum
//		printf("%.1f\n",sum);//输出打印sum的平均值
//	return 0;
//}

//BC41 你是天才吗？
//int main()
//{
//	//创建一个整型变量a
//	int a;
//	//用while循环实现来多组输入
//    //while循环输入并读取一个数,判断读取的数是否正常，读取正常，返回值等于1，则进入循环判断
//	//如果读取失败则返回EOF，EOF为（-1）不等于1，则循环判断不成立
//	while (scanf("%d", &a)==1)//循环输入，读取数正常，返回值等于1，则进入循环判断，读取失败，则循环判断不成立
//	{
//		if(a>=140)//if判断a的值大于等于140，输出Genius,则输出为空
//			printf("Genius\n");//输出并打印GEGenius
//    }
//	//第二种写法
//	while (scanf("%d", &a) != EOF)//循环输入，如果读取的数不等于EOF，就是正常的，则就进入循环判断
//	{
//		if (a >= 140)//判断a的值大于等于140，输出Genius，则输出为空
//	printf("Genius\n");//输出并打印Genius
//	}
//	return 0;
//}

//BC49 判断2个数的大小
//int main()
//{
//	int a = 0, b = 0;//创建两个整型变量，并赋初值
//    //while循环实现多组输入
//	//while (scanf("%d %d",&a,&b)==2)//循环输入两个数，读取正常 等于2，则进入循环判断，读取失败，则判断不成立（第一种方法）
//	while (scanf("%d %d", &a, &b) != EOF)//循环输入两个数，如果读取不等于EOF ,则是正常，进入循环判断（第二种方法）
//	{
//		if (a > b) //如果a大于b，则输出a>b(代码块1）
//			printf("%d>%d\n", a, b);//输出并打印a和b的值
//		else	if (a < b)//如果a小于b，则输出a和b（代码块2）
//		printf("%d<%d\n", a, b);//输出并打印a和b的值
//		else //否则a等于b，输出a和b（代码块3）
//		printf("%d=%d\n", a, b);//输出并打印a和b的值
//	}
//	return 0;
//}

//BC83 被5整除的问题
//int main()
//{
//	int num;//创建一个整型变量a
//	scanf("%d", &num);//输入一个数，进入ifY语句判断
//	//如果num的值能被5整除且值等于0，则输出YES,值不等于0，否则输出NO
//  if (num % 5 == 0)如果num能被5取模，余数等于0，则输出YES，不等于0，则输出NO
//		printf("YES\n");//输出并打印YES
//	else //否则
//		printf("NO\n");//输出并打印NO
//	return 0;
//}

//BC114 小乐乐排电梯
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int tep = n / 12 * 4 + 2;
//	printf("%d\n", tep);
//	return 0;
//}


//int main()
//{
//    char ch;
//    scanf("%c", &ch);
//    if (ch >= 'a' && ch <= 'Z')
//        printf("YES\n");
//    else
//        printf("NO\n");
//
//    return 0;
//}


//int main()
//{
//	int a = 0, b = 0;
//	for (a = 1, b = 1; a < 100; a++)
//	{
//		if (b >= 20) break;
//		if (b % 3 == 1)
//		{
//			b = b + 3;
//			continue;
//		}
//		b = b - 5;
//	}
//	printf("%d\n", a);
//	return 0;
//}